home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / emerald / emrldsys.lha / Language / Compiler / trace.c < prev    next >
C/C++ Source or Header  |  1990-08-16  |  3KB  |  161 lines

  1. /*
  2.  * @(#)trace.c    1.7  1/20/89
  3.  */
  4. #include "types.h"
  5. #include "flags.h"
  6. #include "assert.h"
  7. #include "trace.h"
  8.  
  9. int         traceenvironment,
  10.         traceemit,
  11.         traceemitmove,
  12.         traceallocate,
  13.         tracehelp,
  14.         traceimports,
  15.         traceatctsort,
  16.         traceassign,
  17.         tracetempstack,
  18.         tracetempreg,
  19.         tracepasses,
  20.         tracekernel,
  21.         tracemanifest,
  22.         traceconform,
  23.         traceconformfailure,
  24.         tracehandler,
  25.         tracegraph,
  26.         tracematchat,
  27.         tracedoto,
  28.         tracebuiltins,
  29.         tracelocals,
  30.         traceknowct,
  31.         traceknowmanifest,
  32.         traceknowlocal,
  33.         tracegenerate,
  34.         traceinvoccache,
  35.         tracedelay = 1,
  36.         tracecopy,
  37.         traceprimitive,
  38.         tracelinenumber,
  39.         tracetypecheck,
  40.         tracedebuginfo;
  41.  
  42. typedef struct {
  43.   char *name;
  44.   int  *flag;
  45. } flagTable, *flagTablePtr;
  46.  
  47. flagTable table [] = {
  48.   "environment", &traceenvironment,
  49.   "emit", &traceemit,
  50.   "emitmove", &traceemitmove,
  51.   "allocate", &traceallocate,
  52.   "help", &tracehelp,
  53.   "imports", &traceimports,
  54.   "atctsort", &traceatctsort,
  55.   "assign", &traceassign,
  56.   "tempstack", &tracetempstack,
  57.   "tempreg", &tracetempreg,
  58.   "passes", &tracepasses,
  59.   "kernel", &tracekernel,
  60.   "manifest", &tracemanifest,
  61.   "conform", &traceconform,
  62.   "conformfailure", &traceconformfailure,
  63.   "handler", &tracehandler,
  64.   "graph", &tracegraph,
  65.   "matchat", &tracematchat,
  66.   "doto", &tracedoto,
  67.   "builtins", &tracebuiltins,
  68.   "locals", &tracelocals,
  69.   "knowct", &traceknowct,
  70.   "knowmanifest", &traceknowmanifest,
  71.   "knowlocal", &traceknowlocal,
  72.   "generate", &tracegenerate,
  73.   "invoccache", &traceinvoccache,
  74.   "delay", &tracedelay,
  75.   "copy", &tracecopy,
  76.   "primitive", &traceprimitive,
  77.   "linenumber", &tracelinenumber,
  78.   "typecheck", &tracetypecheck,
  79.   "debuginfo", &tracedebuginfo,
  80.   NULL, 0
  81. };
  82.  
  83. void toLower(s)
  84. register char *s;
  85. {
  86.   register char c;
  87.   while (c = *s) {
  88.     if (c >= 'A' && c <= 'Z') *s += ('a' - 'A');
  89.     s++;
  90.   }
  91. }
  92.  
  93. char *find(s, c)
  94. register char *s, c;
  95. {
  96.   register char theC;
  97.   while ((theC = *s) && theC != c) s++;
  98.   return(theC == c ? s : NULL);
  99. }
  100.  
  101. parseTraceFlag(f)
  102. register char *f;
  103. {
  104.   char *comma, *equals;
  105.   register flagTablePtr tp;
  106.   int value;
  107.  
  108.   assert(*f == '-'); f++;
  109.   assert(*f == 'T'); f++;
  110.   toLower(f);
  111.   while (f && *f) {
  112.     comma = find(f, ',');
  113.     if (comma != NULL) *comma = '\0';
  114.     equals = find(f, '=');
  115.     if (equals == NULL) {
  116.       value = 1;
  117.     } else {
  118.       value = atoi(equals+1);
  119.       if (value <= 0) value = 1;
  120.       *equals = '\0';
  121.     }
  122.     for (tp = &table[0]; tp->name; tp++) {
  123.       if (!strcmp(f, tp->name)) {
  124.     *tp->flag = value;
  125.     break;
  126.       }
  127.     }
  128.     if (tp->name == NULL) {
  129.       fprintf(stdout, "Unknown trace name \"%s\"\n", f);
  130.       return(0);
  131.     }
  132.     f = (comma == NULL ? NULL : comma + 1);
  133.   }
  134.   return(1);
  135. }
  136.  
  137. void initializeTrace()
  138. {
  139.   register flagTablePtr tp;
  140.   
  141.   IFTRACE(help, 1) {
  142.     fprintf(stdout, "Trace\t\tValue\n");
  143.     for (tp = &table[0]; tp->name; tp++) {
  144.       fprintf(stdout, "\"%s\" -->\t%d\n", tp->name, *tp->flag);
  145.     }
  146.   }
  147.   if (traceconform > 0) traceconform = 0x10000000;
  148.   if (traceconformfailure > 0) traceconformfailure = 0x10000000;
  149. }
  150.  
  151. /*VARARGS2*/
  152. void trace(level, format, args)
  153. int level;
  154. char *format;
  155. int args;
  156. {
  157.   while (--level > 0) putc(' ', stdout);
  158.   _doprnt(format, &args, stdout);
  159.   putc('\n', stdout);
  160. }
  161.